//编写一个完整的Java Application 程序。包含类Shape、类Oval、类ShapeTest，具体要求如下：
//        (1)编写一个抽象类Shape表示形状对象，包含以下成员
//        ①属性：
//        PI：double型常数，值为3.1415926；
//        ②方法：
//
//        double area(), 抽象方法；
//        double perimeter()，抽象方法；
//        (2)编写一个Shape类的子类Oval，表示椭圆对象，包含以下成员
//        ①属性：
//        a：私有，double型，长轴半径；
//        b：私有，double型，短轴半径；
//        ②方法：
//        Oval(double a，double b), 构造方法,用参数设置椭圆的长轴半径和短轴半径
//        Oval(),构造方法，将椭圆的长轴半径和短轴半径都初始化为0。
//        double area()，重写Shape类中的area方法，返回椭圆的面积( )
//        double perimeter()，重写Shape类中的perimeter方法，返回椭圆的周长( )
//public String toString( )，将把当前椭圆对象的转换成字符串形式，例如长轴半径为10.0，短轴半径为5，返回字符串"Oval(a:10.0,b:5.0)"。
//        （3）编写公共类Main,实现如下功能
//        输入长轴半径和短轴半径，并创建一个椭圆对象；
//        分别用area和perimeter方法，求出以上椭圆的面积和宽度并输出，输出过程中要求使用到toString方法，输出格式如下：
//        输入格式:
//        输入长轴半径和短轴半径
//
//        输出格式:
//        输出椭圆的面积和周长。
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int lonr = sc.nextInt();
        int shor = sc.nextInt();
        Oval o = new Oval(lonr, shor);
        System.out.println("The area of " + o.toString() + " is " + o.area());
        System.out.println("The perimeterof " + o.toString() + " is " + o.perimeter());
    }
}

abstract class Shape {
    double PI = 3.1415926;

    abstract double area();

    abstract double perimeter();
}

class Oval extends Shape {
    private double lonr;
    private double shor;

    Oval(double a, double b) {
        this.lonr = a;
        this.shor = b;
    }

    Oval() {
        this.lonr = 0;
        this.shor = 0;
    }

    @Override
    double area() {
        return this.PI * this.shor * this.lonr;
    }

    @Override
    double perimeter() {
        return 2 * this.PI * Math.sqrt
                ((this.lonr * this.lonr + this.shor * this.shor) / 2);
    }

    public String toString() {
        return "Oval(a:" + this.lonr + ",b:" + this.shor + ")";
    }
}